package com.alibaba.middleware.hsf.guide.server.hello;

import com.alibaba.middleware.hsf.guide.api.common.StopGuard;
import com.alibaba.middleware.hsf.guide.server.service.HelloWorldServiceImpl;

import com.taobao.hsf.app.api.util.HSFApiProviderBean;

import java.util.Date;

/**
 * 发布一个普通的 HelloWorldService HSF 服务
 */
public class Start {
    public static void main(String[] args) {
        // 设置 project.name，方便在 hsfops 中查到对应的应用名
        System.setProperty("project.name", "HSF-Guide-Server-Hello");
        System.setProperty("hsf.server.port", "0");
        System.out.println("HSF-Guide-Server-Hello begin start @ " + new Date());

        // 服务的实现
        Object target = new HelloWorldServiceImpl();

        // ---------------------- 装配 -----------------------//
        // [设置] HSF服务发布逻辑
        HSFApiProviderBean hsfApiProviderBean = new HSFApiProviderBean();
        // [设置] 发布服务的接口
        hsfApiProviderBean.setServiceInterface("com.alibaba.middleware.hsf.guide.api.service.HelloWorldService");
        // [设置] 服务的实现对象
        hsfApiProviderBean.setTarget(target);
        // [设置] 服务的版本
        hsfApiProviderBean.setServiceVersion("1.0.0");
        // [设置] 服务的归组
        hsfApiProviderBean.setServiceGroup("HSF");
        // [设置] 服务的响应时间
        hsfApiProviderBean.setClientTimeout(3000);
        // [设置] 服务传输业务对象时的序列化类型
        hsfApiProviderBean.setSerializeType("hessian");

        // ---------------------- 发布 -----------------------//
        // [发布] HSF服务
        try {
            hsfApiProviderBean.init();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("HSF-Guide-Server-Hello started @ " + new Date());

        // [运行] 运行，并等待外部命令停止
        StopGuard.guard();

        // ---------------------- 停止 -----------------------//
        // [停止] HSF服务
        try {
            hsfApiProviderBean.shutdownHSFServer();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
